home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / doom / qplus10.zip / HKNIGHT.QC < prev    next >
Text File  |  1996-07-31  |  19KB  |  460 lines

  1. /*
  2. ==============================================================================
  3.  
  4. KNIGHT
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd /raid/quake/id1/models/knight2
  10. $origin 0 0 24
  11. $base base
  12. $skin skin
  13.  
  14. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  15.  
  16. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9
  17. $frame walk10 walk11 walk12 walk13 walk14 walk15 walk16 walk17
  18. $frame walk18 walk19 walk20
  19.  
  20. $frame run1 run2 run3 run4 run5 run6 run7 run8
  21.  
  22. $frame pain1 pain2 pain3 pain4 pain5
  23.  
  24. $frame death1 death2 death3 death4 death5 death6 death7 death8
  25. $frame death9 death10 death11 death12
  26.  
  27. $frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  28. $frame deathb9
  29.  
  30. $frame char_a1 char_a2 char_a3 char_a4 char_a5 char_a6 char_a7 char_a8
  31. $frame char_a9 char_a10 char_a11 char_a12 char_a13 char_a14 char_a15 char_a16
  32.  
  33. $frame magica1 magica2 magica3 magica4 magica5 magica6 magica7 magica8
  34. $frame magica9 magica10 magica11 magica12 magica13 magica14
  35.  
  36. $frame magicb1 magicb2 magicb3 magicb4 magicb5 magicb6 magicb7 magicb8
  37. $frame magicb9 magicb10 magicb11 magicb12 magicb13
  38.  
  39. $frame char_b1 char_b2 char_b3 char_b4 char_b5 char_b6
  40.  
  41. $frame slice1 slice2 slice3 slice4 slice5 slice6 slice7 slice8 slice9 slice10
  42.  
  43. $frame smash1 smash2 smash3 smash4 smash5 smash6 smash7 smash8 smash9 smash10
  44. $frame smash11
  45.  
  46. $frame w_attack1 w_attack2 w_attack3 w_attack4 w_attack5 w_attack6 w_attack7 
  47. $frame w_attack8 w_attack9 w_attack10 w_attack11 w_attack12 w_attack13 w_attack14
  48. $frame w_attack15 w_attack16 w_attack17 w_attack18 w_attack19 w_attack20 
  49. $frame w_attack21 w_attack22 
  50.  
  51. $frame magicc1 magicc2 magicc3 magicc4 magicc5 magicc6 magicc7 magicc8
  52. $frame magicc9 magicc10 magicc11
  53.  
  54.  
  55. void() hknight_char_a1;
  56. void() hknight_run1;
  57. void() hk_idle_sound;
  58.  
  59. void(float offset) hknight_shot =
  60. {
  61.     local    vector    offang;
  62.     local    vector    org, vec;
  63.     
  64.     offang = vectoangles (self.enemy.origin - self.origin);
  65.     offang_y = offang_y + offset * 6;
  66.     
  67.     makevectors (offang);
  68.  
  69.     org = self.origin + self.mins + self.size*0.5 + v_forward * 20;
  70.  
  71. // set missile speed
  72.     vec = normalize (v_forward);
  73.     vec_z = 0 - vec_z + (random() - 0.5)*0.1;
  74.     
  75.     launch_spike (org, vec);
  76.     newmis.classname = "knightspike";
  77.     setmodel (newmis, "progs/k_spike.mdl");
  78.     setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);        
  79.     newmis.velocity = vec*300;
  80.     sound (self, CHAN_WEAPON, "hknight/attack1.wav", 1, ATTN_NORM);
  81. };
  82.  
  83. void() CheckForCharge =
  84. {
  85. // check for mad charge
  86. if (!enemy_vis)
  87.     return;
  88. if (time < self.attack_finished)
  89.     return;    
  90. if ( fabs(self.origin_z - self.enemy.origin_z) > 20)
  91.     return;        // too much height change
  92. if ( vlen (self.origin - self.enemy.origin) < 80)
  93.     return;        // use regular attack
  94.  
  95. // charge        
  96.     SUB_AttackFinished (2);
  97.     hknight_char_a1 ();
  98.  
  99. };
  100.  
  101. void() CheckContinueCharge =
  102. {
  103.     if (time > self.attack_finished)
  104.     {
  105.         SUB_AttackFinished (3);
  106.         hknight_run1 ();
  107.         return;        // done charging
  108.     }
  109.     if (random() > 0.5)
  110.         sound (self, CHAN_WEAPON, "knight/sword2.wav", 1, ATTN_NORM);
  111.     else
  112.         sound (self, CHAN_WEAPON, "knight/sword1.wav", 1, ATTN_NORM);
  113. };
  114.  
  115. //===========================================================================
  116.  
  117. void()    hknight_stand1    =[    $stand1,    hknight_stand2    ] {ai_stand();};
  118. void()    hknight_stand2    =[    $stand2,    hknight_stand3    ] {ai_stand();};
  119. void()    hknight_stand3    =[    $stand3,    hknight_stand4    ] {ai_stand();};
  120. void()    hknight_stand4    =[    $stand4,    hknight_stand5    ] {ai_stand();};
  121. void()    hknight_stand5    =[    $stand5,    hknight_stand6    ] {ai_stand();};
  122. void()    hknight_stand6    =[    $stand6,    hknight_stand7    ] {ai_stand();};
  123. void()    hknight_stand7    =[    $stand7,    hknight_stand8    ] {ai_stand();};
  124. void()    hknight_stand8    =[    $stand8,    hknight_stand9    ] {ai_stand();};
  125. void()    hknight_stand9    =[    $stand9,    hknight_stand1    ] {ai_stand();};
  126.  
  127. //===========================================================================
  128.  
  129. void()    hknight_walk1    =[    $walk1,        hknight_walk2    ] {
  130. hk_idle_sound();
  131. ai_walk(2);};
  132. void()    hknight_walk2    =[    $walk2,        hknight_walk3    ] {ai_walk(5);};
  133. void()    hknight_walk3    =[    $walk3,        hknight_walk4    ] {ai_walk(5);};
  134. void()    hknight_walk4    =[    $walk4,        hknight_walk5    ] {ai_walk(4);};
  135. void()    hknight_walk5    =[    $walk5,        hknight_walk6    ] {ai_walk(4);};
  136. void()    hknight_walk6    =[    $walk6,        hknight_walk7    ] {ai_walk(2);};
  137. void()    hknight_walk7    =[    $walk7,        hknight_walk8    ] {ai_walk(2);};
  138. void()    hknight_walk8    =[    $walk8,        hknight_walk9    ] {ai_walk(3);};
  139. void()    hknight_walk9    =[    $walk9,        hknight_walk10    ] {ai_walk(3);};
  140. void()    hknight_walk10    =[    $walk10,    hknight_walk11    ] {ai_walk(4);};
  141. void()    hknight_walk11    =[    $walk11,    hknight_walk12    ] {ai_walk(3);};
  142. void()    hknight_walk12    =[    $walk12,    hknight_walk13    ] {ai_walk(4);};
  143. void()    hknight_walk13    =[    $walk13,    hknight_walk14    ] {ai_walk(6);};
  144. void()    hknight_walk14    =[    $walk14,    hknight_walk15    ] {ai_walk(2);};
  145. void()    hknight_walk15    =[    $walk15,    hknight_walk16    ] {ai_walk(2);};
  146. void()    hknight_walk16    =[    $walk16,    hknight_walk17    ] {ai_walk(4);};
  147. void()    hknight_walk17    =[    $walk17,    hknight_walk18    ] {ai_walk(3);};
  148. void()    hknight_walk18    =[    $walk18,    hknight_walk19    ] {ai_walk(3);};
  149. void()    hknight_walk19    =[    $walk19,    hknight_walk20    ] {ai_walk(3);};
  150. void()    hknight_walk20    =[    $walk20,    hknight_walk1    ] {ai_walk(2);};
  151.  
  152. //===========================================================================
  153.  
  154. void()    hknight_run1    =[    $run1,        hknight_run2    ] {
  155. hk_idle_sound();
  156. ai_run (20); CheckForCharge (); };
  157. void()    hknight_run2    =[    $run2,        hknight_run3    ] {ai_run(25);};
  158. void()    hknight_run3    =[    $run3,        hknight_run4    ] {ai_run(18);};
  159. void()    hknight_run4    =[    $run4,        hknight_run5    ] {ai_run(16);};
  160. void()    hknight_run5    =[    $run5,        hknight_run6    ] {ai_run(14);};
  161. void()    hknight_run6    =[    $run6,        hknight_run7    ] {ai_run(25);};
  162. void()    hknight_run7    =[    $run7,        hknight_run8    ] {ai_run(21);};
  163. void()    hknight_run8    =[    $run8,        hknight_run1    ] {ai_run(13);};
  164.  
  165. //============================================================================
  166.  
  167. void()    hknight_pain1    =[    $pain1,        hknight_pain2    ] {sound (self, CHAN_VOICE, "hknight/pain1.wav", 1, ATTN_NORM);};
  168. void()    hknight_pain2    =[    $pain2,        hknight_pain3    ] {};
  169. void()    hknight_pain3    =[    $pain3,        hknight_pain4    ] {};
  170. void()    hknight_pain4    =[    $pain4,        hknight_pain5    ] {};
  171. void()    hknight_pain5    =[    $pain5,        hknight_run1    ] {};
  172.  
  173. //============================================================================
  174.  
  175. void()    hknight_die1    =[    $death1,    hknight_die2    ] {ai_forward(10);};
  176. void()    hknight_die2    =[    $death2,    hknight_die3    ] {ai_forward(8);};
  177. void()    hknight_die3    =[    $death3,    hknight_die4    ]
  178. {ai_forward(7);};
  179. void()    hknight_die4    =[    $death4,    hknight_die5    ] {};
  180. void()    hknight_die5    =[    $death5,    hknight_die6    ] {};
  181. void()    hknight_die6    =[    $death6,    hknight_die7    ] {};
  182. void()    hknight_die7    =[    $death7,    hknight_die8    ] {};
  183. void()    hknight_die8    =[    $death8,    hknight_die9    ] {ai_forward(10);};
  184. void()    hknight_die9    =[    $death9,    hknight_die10    ] {ai_forward(11);};
  185. void()    hknight_die10    =[    $death10,    hknight_die11    ] {};
  186. void()    hknight_die11    =[    $death11,    hknight_die12    ] {};
  187. void()    hknight_die12    =[    $death12,    hknight_die12    ] {};
  188.  
  189. void()    hknight_dieb1    =[    $deathb1,    hknight_dieb2    ] {};
  190. void()    hknight_dieb2    =[    $deathb2,    hknight_dieb3    ] {};
  191. void()    hknight_dieb3    =[    $deathb3,    hknight_dieb4    ]
  192. {};
  193. void()    hknight_dieb4    =[    $deathb4,    hknight_dieb5    ] {};
  194. void()    hknight_dieb5    =[    $deathb5,    hknight_dieb6    ] {};
  195. void()    hknight_dieb6    =[    $deathb6,    hknight_dieb7    ] {};
  196. void()    hknight_dieb7    =[    $deathb7,    hknight_dieb8    ] {};
  197. void()    hknight_dieb8    =[    $deathb8,    hknight_dieb9    ] {};
  198. void()    hknight_dieb9    =[    $deathb9,    hknight_dieb9    ] {};
  199.  
  200. void() hknight_really_die =
  201. {
  202.     if(self.flags & FL_MONSTER)
  203.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  204.     ThrowHead ("progs/h_hellkn.mdl", self.health);
  205.     ThrowGib ("progs/gib3.mdl", self.health);
  206.     ThrowGib ("progs/gib3.mdl", self.health);
  207.     ThrowGib ("progs/gib1.mdl", self.health);
  208.     ThrowGib ("progs/gib2.mdl", self.health);
  209.     ThrowGib ("progs/gib3.mdl", self.health);
  210. };
  211.  
  212. void() hknight_die =
  213. {
  214. // check for gib
  215.     if (self.health < -40)
  216.     {
  217.         hknight_really_die();
  218.         return;
  219.     }
  220.  
  221. // regular death
  222.     sound (self, CHAN_VOICE, "hknight/death1.wav", 1, ATTN_NORM);
  223.     if (random() > 0.5)
  224.         hknight_die1 ();
  225.     else
  226.         hknight_dieb1 ();
  227.         self.health=135;
  228.     setsize (self, '-16 -16 -24', '16 16 -12');
  229.     self.th_stand = SUB_Null;
  230.     self.th_walk = SUB_N